package com.zhongwang.mms.module.buy.dao;

import com.zhongwang.mms.gen.entity.*;
import com.zhongwang.mms.module.buy.model.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Description: 采购计划 dao
 *
 * @Author: China.sgl
 * @Date: 2020/4/7 16:28
 */
@Repository
public interface BuyPlanDao {

    /**
     * 按条件查询采购计划
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findBuyPlanByQuery(ShoppingPlanModel shoppingPlanModel);

    /**
     * 根据ID修改状态
     *
     * @param id 主键
     * @param status 状态
     * @return 行数
     */
    int updateStatusById(@Param("id") Integer id, @Param("status") Integer status);

    /**
     * 根据ID修改变更ID
     *
     * @param rppSppId 主键
     * @param rpcId 变更表主键
     * @return 行数
     */
    int updateChangeIdById(@Param("id") Integer rppSppId, @Param("changeId") Integer rpcId);

    /**
     * 查询仓库字典表
     *
     * @return list
     */
    List<TWarehouseInfo> findStocks();

    /**
     * 根据采购计划ID查询采购计划
     *
     * @param sppId 采购计划ID
     * @param rppId 提报计划ID
     * @return ShoppingPlanModel
     */
    ShoppingPlanModel findBySppId(@Param("sppId") Integer sppId, @Param("rppId") Integer rppId);

    /**
     * 根据提报计划ID查询采购计划
     *
     * @param rppId 提报计划ID
     * @return ShoppingPlanModel
     */
    ShoppingPlanModel findByRppId(Integer rppId);

    /**
     * 修改提报计划的采购ID
     *
     * @param ids 采购计划主键数组
     * @param sppId 采购计划主键
     * @return 行数
     */
    int updateReportPlan(@Param("ids") Integer[] ids, @Param("sppId") Integer sppId);

    /**
     * 查询采购坟墓
     *
     * @return list
     */
    List<ShoppingPlanModel> findBuyPlan(String name);

    /**
     * 根据ID查询提报计划
     *
     * @param rppId 提报计划ID
     * @return BReportPlan
     */
    BReportPlan getReportPlanById(Integer rppId);

    /**
     * 添加采购计划
     *
     * @param data 采购计划
     */
    void insert(ShoppingPlanModel data);

    /**
     * 修改提报计划的采购ID
     *
     * @param rppId 提报计划ID
     * @param sppId 采购计划ID
     */
    void updateReportPlanById(@Param("id") Integer rppId, @Param("sppId") Integer sppId);

    /**
     * 修改提报计划的采购ID为空
     *
     * @param id 采购计划ID
     */
    void updateReportPlanRppSppId(Integer id);

    /**
     * 根据条件查询采购计划导出列表
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findExportBuyPlanByQuery(ShoppingPlanModel shoppingPlanModel);

    /**
     * 查询采购计划可导出的列表数据
     *
     * @param ids 主键集合
     * @return list
     */
    List<ExportBuyPlanModel> findBuyPlanMayExportList(String ids);
    /**
     * 查询采购计划可导出的列表附表数据
     *
     * @param ids 主键集合
     * @return list
     */
    List<ExportBuyPlanScheduleModel> findBuyPlanScheduleMayExportList(String ids);

    /**
     * 修改采购计划状态和导出日志ID
     *
     * @param spiId 导出记录表ID
     * @param ids 主键
     */
    void updateBuyPlanStatusAndExportLogId(@Param("id") Integer spiId, @Param("ids") String ids);

    /**
     * 按条件查询可变更的采购计划
     * 状态为已入导OA，并且变更记录表不存在相关的未导入状态的数据
     * 有变更记录未处理的不允许二次变更
     *
     * @param shoppingPlanModel 条件
     * @return List
     */
    List<ShoppingPlanModel> findBuyPlanChangeListByQuery(ShoppingPlanModel shoppingPlanModel);

    /**
     * 采购计划变更
     * 根据ID修改 SAP编码，KC码，数量，描述
     *
     * @param shoppingPlanModel 采购计划
     * @return 行数
     */
    int updateBuyPlanByChange(ShoppingPlanModel shoppingPlanModel);

    /**
     * 按条件查询采购计划变更记录表数据
     *
     * @param shoppingPlanModel 条件
     * @return List
     */
    List<BShoppingPlanChange> findBuyPlanChangeLogByQuery(ShoppingPlanModel shoppingPlanModel);

    /**
     * 删除变更记录
     *
     * @param id 主键
     * @return 行数
     */
    int updateBuyPlanChangeLogStatusById(Integer id);

    /**
     * 查询采购计划变更日志表可导出的列表数据
     *
     * @param ids 主键字符串
     * @return list
     */
    List<ExportBuyPlanChnageModel> findBuyPlanChangeLogMayExportList(String ids);

    /**
     * 修改采购计划变更日志表导出状态和导出日志表ID
     *
     * @param spiId 导出表主键
     * @param ids 变更表主键
     */
    void updateBuyPlanChangeLogStatusAndExportId(@Param("id") Integer spiId, @Param("ids") String ids);

    /**
     * 按条件查询已导出的采购计划
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findBuyPlanByProgressEdit(ShoppingPlanModel shoppingPlanModel);

    /**
     * 编辑采购计划进度
     *
     * @param shoppingPlanModel 进度
     */
    void updateBuyPlanProgress(BShoppingPlan shoppingPlanModel);

    /**
     * 根据条件查询计划变更列表
     *
     * @param shoppingPlanChangeModel 条件
     * @return list
     */
    List<ShoppingPlanChangeModel> findPlanChangeQueryList(ShoppingPlanChangeModel shoppingPlanChangeModel);

    /**
     * 综合查询
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findIntegrate(ShoppingPlanModel shoppingPlanModel);

    /**
     * 查询外购件回货列表
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findOuterReturnList(ShoppingPlanModel shoppingPlanModel); /**
    /** 查询外协件回货列表
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findOutsourceReturnList(ShoppingPlanModel shoppingPlanModel);

    /**
     * 查询入库记录
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findOrderDetail(ShoppingPlanModel shoppingPlanModel);/**
     * 查询入库记录
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findOrderDetailByOutSource(ShoppingPlanModel shoppingPlanModel);

    /**
     * 查询原材料入库记录
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findMaterialOrderDetail(ShoppingPlanModel shoppingPlanModel);

    /**
     * 查询原材料回货列表
     *
     * @param shoppingPlanModel 条件
     * @return list
     */
    List<ShoppingPlanModel> findMaterialReturnList(ShoppingPlanModel shoppingPlanModel);

    /**
     * 修改采购计划状态及清空导出记录ID
     *
     * @param sppImportLogId 导出记录ID
     */
    void updateBuyPlanStatusAndClearExportLogIdBySpiId(Integer sppImportLogId);

    /**
     * 修改导出记录状态
     *
     * @param sppImportLogId 导出记录ID
     * @return 行数
     */
    int updateSpiStatus(Integer sppImportLogId);

    /**
     * 导出采购进度
     *
     * @param param param
     * @return json
     */
    List<ImportShoppingPlanRowNoModel> findImportShoppingPlanRowNoModelByWhere(ShoppingPlanModel param);

    /**
     * 根据主键获取采购计划表实体类
     *
     * @param sppId 主键
     */
    ShoppingPlanModel getShoppingPlanByPrimaryKey(int sppId);

    /**
     * 根据主键修改行号
     *
     * @param model 主键与行号
     */
    void updateShoppingPlanSppRowNoByPrimaryKey(ImportShoppingPlanRowNoModel model);

    /**
     * 根据批次号获取日志
     *
     * @param code 批次号
     */
    BShoppingPlanImportLog selectBySpiTrackCode(String code);

    /**
     *@FunctionName: updateBuyPlanStatusAndClearExportLogIdBySppId
     *@Description:  采购计划导出 撤消功能， 单条撤销
     *@Author: 徐一贺
     *@CreateDate: 2020/6/9 9:47
     *@Phone: 18241927380
     *@Version: v 1.0.0
     */
    int updateBuyPlanStatusAndClearExportLogIdBySppId(BShoppingPlan plan);

    /**
     * 根据主键修改采购计划合报状态
     *
     * @param flag 合报状态
     * @param sppId 主键
     * @return 行数
     */
    int updateIntegraFlagById(@Param("flag") Integer flag, @Param("sppId") Integer sppId);

    /**
     * 根据物料描述查询采购计划
     *
     * @param info 描述
     * @return List
     */
    List<ShoppingPlanModel> findBuyPlanByMatDesc(String info);

    /**
     * 查询采购计划变更记录表
     *
     * @param ids 采购计划ID
     * @return list
     */
    List<ExportBuyPlanChangeScheduleModel> findBuyplanChangeLogMayExportSubList(String ids);
    /**
     * 获取采购计划审阅列表数据
     *
     * @param shoppingPlanModel 查询条件
     * @return list
     */
    List<ShoppingPlanModel> findBuyPlanListByQuery(ShoppingPlanModel shoppingPlanModel);
    /**
     * 根据逐渐更改审阅状态
     *
     * @param id 主键 status 状态
     * @return int
     */
    int updateReviewFlagById(@Param("id")Integer id,@Param("reviewFlag")Integer status);

    /**
     * 根据主键更新采购计划单价
     * @param odaNumPrice 单价
     * @param sppId 主键
     * @return int
     */
    int updateSppPrice(@Param("sppPrice") Double odaNumPrice, @Param("sppId") Integer sppId);

    /**
     * getBShoppingPlanByPrimaryKey
     * 根据主键获取采购计划
     * @param sppId
     * @return
     */
    BShoppingPlan getBShoppingPlanByPrimaryKey(Integer sppId);


    /**
     * @title: getHOrderDetailByPrimaryKey
     * @description: 根据主键获取成品库入库单
     * @param: [odaId]
     * @return: com.zhongwang.mms.gen.entity.HOrderDetail
     * @author: 徐一贺
     * @date: 2020/11/7 9:10
     * @versron: ver 1.0
     */
    HOrderDetail getHOrderDetailByPrimaryKey(Integer odaId);

    /**
     * @title: findBReportPlanByRppSppId
     * @description: 根据采购计划主键获取提报计划列表
     * @param: [sppId]
     * @return: java.util.List<com.zhongwang.mms.gen.entity.BReportPlan>
     * @author: 徐一贺
     * @date: 2020/11/7 9:17
     * @versron: ver 1.0
     */
    List<BReportPlan> findBReportPlanByRppSppId(Integer sppId);
}
